home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir43 / med300.zip / MECORE.CLA < prev    next >
Text File  |  1994-02-22  |  5KB  |  133 lines

  1.  
  2. !▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3. !█                                     █
  4. !█ MECORE.CLA                                                            █
  5. !█ Low-level edit buffer manipulation                     █
  6. !█                                     █
  7. !█ Revision Number: 1                             █
  8. !█ Revision Date  : 22-Feb-94                                            █
  9. !█                                     █
  10. !█ Revision History                             █
  11. !█   1 Created                                 █
  12. !█                                     █
  13. !▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  14.  
  15.              MEMBER('MEMOEDIT')
  16.  
  17. !────────────────────────────────────────────────────────────────────────
  18. !         Return character at specified buffer offset
  19. !────────────────────────────────────────────────────────────────────────
  20. ME_GetChar    FUNCTION( usOffset )
  21.  
  22.           ! Return:
  23. ubRetVal      BYTE                 ! Character
  24.  
  25.               ! Locals:
  26. ulAddress     ULONG                              ! Address
  27.  
  28.   CODE
  29.   IF NOT MED:usCharacters                        ! If buffer is empty
  30.     ubRetVal = 0                 !   Return 0
  31.   ELSIF usOffset > (MED:usCharacters - 1)        ! Else if past buffer end
  32.     ubRetVal = 0                 !   Return 0
  33.   ELSE                         ! Else
  34.     ulAddress = MED:ulEditBuffer + usOffset      !   Form address
  35.     PEEK(ulAddress, ubRetVal)                    !   Return character
  36.   .                         ! Endif
  37.   RETURN( ubRetVal )
  38.  
  39.  
  40. !────────────────────────────────────────────────────────────────────────
  41. !        Overwrites character at specified buffer offset
  42. !────────────────────────────────────────────────────────────────────────
  43. ME_PutChar    PROCEDURE( usOffset, ubChar )
  44.  
  45.               ! Locals:
  46. ulAddress     ULONG                              ! Address
  47.  
  48.   CODE
  49.   IF NOT MED:usCharacters                        ! If buffer is empty
  50.     RETURN                     !   Return
  51.   ELSIF usOffset >= (MED:usCharacters - 1)       ! Else if past end
  52.     ME_InsTxt(usOffset, 1, ubChar)               !   Insert character
  53.   ELSE                         ! Else
  54.     ulAddress = MED:ulEditBuffer + usOffset      !   Form address
  55.     POKE(ulAddress, ubChar)                     !   Overwrite character
  56.   .                         ! Endif
  57.   RETURN
  58.  
  59.  
  60. !────────────────────────────────────────────────────────────────────────
  61. !          Return text block in specified buffer range
  62. !────────────────────────────────────────────────────────────────────────
  63. ME_GetBlock  PROCEDURE( xDest, usOffset, usCount )
  64.  
  65.   CODE
  66.   xDest = ''                    ! Clear destination
  67.   IF MED:usCharacters                           ! If buffer not empty
  68.     usOffset = ME_Min(usOffset, MED:usCharacters-1)
  69.     usCount  = ME_Min(usCount, SIZE(xDest))     !   Get text
  70.     usCount  = ME_Min(usCount, (MED:usCharacters-1) - usOffset)
  71.     CMemMove(ADDRESS(xDest), MED:ulEditBuffer + usOffset, usCount)
  72.   .                        ! Endif
  73.   RETURN
  74.  
  75.  
  76. !────────────────────────────────────────────────────────────────────────
  77. !     Insert a string of text at the specified buffer offset
  78. !────────────────────────────────────────────────────────────────────────
  79. ME_InsTxt    PROCEDURE( usOffset, usStrLen, sString )
  80.  
  81.          ! Locals:
  82. usLine         USHORT                 ! Line index
  83. ulInsPos     ULONG                 ! Insertion point
  84.  
  85.   CODE
  86.                          ! Set offset and length
  87.   usOffset = ME_Min(usOffset, ME_Max(MED:usCharacters-1, 0))
  88.   usStrLen = ME_Min(usStrLen, MED:usMaxChars - MED:usCharacters)
  89.  
  90.   MED:usCharacters += usStrLen                   ! Update character count
  91.   usLine = ME_LineIndex( usOffset )              ! Adjust line pointers
  92.   ME_AdjLines(usLine+1, usStrLen)                !
  93.  
  94.                          ! Adjust any marked block
  95.   IF (MED:isBlockBegin >= usOffset) THEN MED:isBlockBegin += usStrLen.
  96.   IF (MED:isBlockEnd   >= usOffset) THEN MED:isBlockEnd   += usStrLen.
  97.  
  98.   ulInsPos = MED:ulEditBuffer + usOffset         ! Insert text
  99.   CMemMove(ulInsPos + usStrLen, ulInsPos, MED:usCharacters - usOffset)
  100.   CMemMove(ulInsPos, ADDRESS(sString), usStrLen) !
  101.   RETURN
  102.  
  103.  
  104. !────────────────────────────────────────────────────────────────────────
  105. !    Delete a string of text at the specified buffer offset
  106. !────────────────────────────────────────────────────────────────────────
  107. ME_DelTxt     PROCEDURE( usOffset, usLength )
  108.  
  109.           ! Locals:
  110. usLine          USHORT                 ! Line index
  111. ulDelPos      ULONG                 ! Deletion point
  112.  
  113.   CODE
  114.   IF NOT MED:usCharacters THEN RETURN.           ! Return if buffer empty
  115.  
  116.                          ! Set offset and length
  117.   usOffset  = ME_Min(usOffset, MED:usCharacters-1)
  118.   usLength  = ME_Min(usLength, (MED:usCharacters-1) - usOffset)
  119.  
  120.   MED:usCharacters -= usLength                   ! Update character count
  121.   usLine = ME_LineIndex( usOffset )              ! Adjust line pointers
  122.   ME_AdjLines(usLine+1, -usLength)               !
  123.  
  124.                          ! Adjust any marked block
  125.   IF (MED:isBlockBegin >= usOffset+1) THEN MED:isBlockBegin -= usLength.
  126.   IF (MED:isBlockEnd   >= usOffset+1) THEN MED:isBlockEnd   -= usLength.
  127.  
  128.   ulDelPos = MED:ulEditBuffer + usOffset         ! Delete text
  129.   CMemMove(ulDelPos, ulDelPos + usLength, MED:usCharacters - usOffset)
  130.   CMemSet(MED:ulEditBuffer + MED:usCharacters, 20H, usLength)
  131.   RETURN                     !
  132.  
  133.